Módulo:Wikidata/Formatos
local p = {} local es = mw.language.new('es') function p.formatImage( value, options ) local str = ' ' end function p.formatBandera(value, options, frame) local coincidenciafor if frame nil then frame = marco end local label = mw.wikibase.label( 'q' .. value'numeric-id' ) if not label then return end local link = mw.wikibase.sitelink('q' .. value'numeric-id' ) local nombre local tipo = mw.ustring.gsub(label,'(%D+)%sde%s%D+','%1') if options.cortar and options.cortar ~= '' then coincidencia = mw.ustring.find( es:lc(options.cortar), es:lc(tipo), plain ) end if coincidencia then nombre = mw.ustring.gsub(label,'%D+%sde%s(%D+)','%1') else nombre = label end local str2 if mw.title.new('Plantilla:Geodatos '.. label ).exists then str2 = frame:preprocess(' ') elseif link and label then str2 = '' .. nombre .. '' elseif label then str2 = nombre else str2 = '' end return str2 end function p.formatCoor(value) local cadenacoor = value return marco:preprocess(' ') end -- Funciones para entidades de Wikidata function p.formatoPremio(valor) local enlace, etiqueta, idEntidad = p.obtenerDatos(valor) -- Eliminar de la etiqueta la categoría del premio if etiqueta then etiqueta = etiqueta:match('^(.*)%s+a%s.*$') or -- Ejemplo: Premio Nébula a la mejor novela corta --> Premio Nébula etiqueta:match('^(.*)%s+al%s.*$') or -- Ejemplo: Premio Hugo al mejor relato --> Premio Hugo etiqueta:match('^(.*) en la categoría') or -- Ejemplo: Premio Prometheus en la categoría Hall of Fame --> Premio Prometheus etiqueta end return p.enlazar(enlace, etiqueta, idEntidad) end function p.formatoGentilicio(valor, opciones, frame) local enlacePais, etiquetaPais, idEntidadPais = p.obtenerDatos(valor) local gentilicio if etiquetaPais then gentilicio = frame:preprocess(' ') if not gentilicio or gentilicio '' then gentilicio = etiquetaPais end end return p.enlazar(enlacePais, gentilicio, idEntidadPais, opciones) end function p.formatoLugar(valor, opciones, frame, calificativos) -- Función que devuelve algo de la forma Lugar, entidad territorial administrativa, país local lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado -- Validar que está informado el id del lugar. if not valor or not valor'numeric-id' then return end -- Obtener primero la entidad territorial administrativa y el país de los calificativos si es posible -- No se obtiene primero el lugar, que sería lo más lógico, porque se obtendrá de forma diferente según -- estén o no informados los calificativos if calificativos then if calificativos'P131' and calificativos'P131'1 and calificativos'P131'1.datavalue and calificativos'P131'1.datavalue.value then entidadTerritorialAdministrativaEnlazada = p.enlazar(p.obtenerDatos(calificativos'P131'1.datavalue.value)) end if calificativos'P17' and calificativos'P17'1 and calificativos'P17'1.datavalue and calificativos'P17'1.datavalue.value then paisEnlazado = p.enlazar(p.obtenerDatos(calificativos'P17'1.datavalue.value)) end end if paisEnlazado then lugarEnlazado = p.enlazar(p.obtenerDatos(valor)) else -- Si el lugar no tiene el calificativo de país obtenerlo de la propiedad país de la -- entidad de Wikidata del lugar. -- De momento no se obtiene la entidad administrativa (tiene unas barbaridades...) local idLugar, enlaceLugar, etiquetaLugar local entidad idLugar = 'Q' .. valor'numeric-id' entidad = mw.wikibase.getEntityObject(idLugar) if not entidad then return end if entidad.sitelinks and entidad.sitelinks.eswiki then enlaceLugar = entidad.sitelinks.eswiki.title end if entidad.labels and entidad.labels.es then etiquetaLugar = entidad.labels.es.value end lugarEnlazado = p.enlazar(enlaceLugar, etiquetaLugar, idLugar, opciones) if entidad.claims and entidad.claims.P17 and entidad.claims.P171 and entidad.claims.P171.mainsnak and entidad.claims.P171.mainsnak.datavalue then paisEnlazado = p.enlazar(p.obtenerDatos(entidad.claims.P171.mainsnak.datavalue.value)) end end if lugarEnlazado paisEnlazado then -- La ciudad de El Vaticano tiene en Wikidata como país a sí misma paisEnlazado = nil end return require('Módulo:Formato texto').separadosPorComa({lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado}) end function p.formatoUnidad(valor, opciones) cantidad = mw.ustring.gsub(valor.value'amount', '+',) unidad = mw.wikibase.label(mw.ustring.gsub(valor.value'unit', '^.-/(Q%d+)$', '%1')) if unidad and tonumber(cantidad) > 1 then textoUnidad = unidad..'s' end if not unidad or (opciones'formatoUnidad' and opciones'formatoUnidad' 'número') then return tonumber(cantidad) elseif unidad and opciones'formatoUnidad' and opciones'formatoUnidad' 'minutos' and unidad 'segundo' then return math.floor(tonumber(cantidad)/60) .. ':' .. (tonumber(cantidad)%60) .. ' ' .. 'minutos' else return cantidad .. ((textoUnidad and ' ' .. textoUnidad) or '') end end -- Formatos de calificativos function p.formatoPeriodo(valor, opciones) local anyoInicio, anyoFin local fechaInicio, fechaFin local opcionesFecha= {'formatoTexto'='mayúscula', 'formatoFecha' = 'año', 'enlace'='no'} local fechasInicio = valor'P580' local fechasFin = valor'P582' local iFechaInicio = 1 local iFechaFin = 1 if not fechasInicio and not fechasFin then return end local periodos = {} if fechasInicio and fechasInicio1 then --if true then return require('Módulo:Tablas').tostring(fechasInicio1) end anyoInicio = require('Módulo:Wikidata').formatoDato(fechasInicio1,opcionesFecha , {}) fechaInicio= anyoInicio -- de momento end if fechasFin and fechasFin1 then anyoFin = require('Módulo:Wikidata').formatoDato(fechasFin1, opcionesFecha, {}) fechaFin = anyoFin -- de momento end while fechaInicio or fechaFin do -- Por cada periodo if fechaInicio and fechaFin and tonumber(fechaInicio) and tonumber(fechaFin) and (tonumber(fechaInicio) <= tonumber(fechaFin)) then if anyoInicio anyoFin then table.insert(periodos, anyoInicio) else table.insert(periodos, anyoInicio .. '–' .. anyoFin) end iFechaInicio = iFechaInicio + 1 iFechaFin = iFechaFin + 1 if fechasInicioiFechaInicio then anyoInicio = require('Módulo:Wikidata').formatoDato(fechasInicioiFechaInicio,opcionesFecha , {}) fechaInicio= anyoInicio -- de momento else anyoInicio = nil fechaInicio= nil end if fechasFiniFechaFin then anyoFin = require('Módulo:Wikidata').formatoDato(fechasFiniFechaFin,opcionesFecha , {}) fechaFin= anyoFin -- de momento else anyoFin = nil fechaFin= nil end elseif anyoInicio then table.insert(periodos, 'desde ' .. anyoInicio) iFechaInicio = iFechaInicio + 1 if fechasInicioiFechaInicio then anyoInicio = require('Módulo:Wikidata').formatoDato(fechasInicioiFechaInicio,opcionesFecha , {}) fechaInicio= anyoInicio -- de momento else anyoInicio = nil fechaInicio= nil end elseif anyoFin then table.insert(periodos, 'hasta ' .. anyoFin) iFechaFin = iFechaFin + 1 if fechasFiniFechaFin then anyoFin = require('Módulo:Wikidata').formatoDato(fechasFiniFechaFin,opcionesFecha , {}) fechaFin= anyoFin -- de momento else anyoFin = nil fechaFin= nil end end end return table.concat(periodos, ', ') end -- Funciones internas -- Las siguientes funciones hacen prácticamente lo mismo que la función -- formatoIdEntidad del módulo Wikidata. -- p.obtenerDatos obtiene los datos de la entidad y p.enlazar los formatea. function p.obtenerDatos(valor) if valor and valor'numeric-id' then local idEntidad = 'q' .. valor'numeric-id' local etiqueta = mw.wikibase.label( idEntidad ) local enlace = mw.wikibase.sitelink( idEntidad ) return enlace, etiqueta, idEntidad end end function p.enlazarEnOtroIdioma(enlace, etiqueta, idioma) local categoria = 'Categoría:Wikia - Muertes em España:Páginas con propiedades de Wikidata con etiqueta en otro idioma' if enlace and etiqueta then return etiqueta .. ' (en)' .. categoria elseif etiqueta then return etiqueta .. ' (en)' .. categoria elseif enlace then return enlace .. ' (en)' .. categoria end end function p.enlazar(enlace, etiqueta, idEntidad, opciones) if opciones then -- Opciones de las etiquetas if opciones.etiqueta and opciones.etiqueta ~= 'null' then -- Por averiguar dónde se usa. etiqueta = opciones.etiqueta end -- Convertir el primer carácter a mayúscula en su caso if etiqueta and opciones'mayúscula' 'sí' then etiqueta = es:ucfirst(etiqueta) end -- Opciones del enlace if opciones'enlace' 'no' then -- No p.enlazar enlace = nil elseif opciones'debeExistir' 'sí' then -- No devolver nada si no está informado el artículo de Wikia de Muertes if not enlace then return end elseif opciones'enlace' 'sí' then if not enlace and etiqueta and not require('Módulo:Páginas').existe(etiqueta) then -- Tomar como enlace la etiqueta si no existe el correspondiente artículo enlace = etiqueta etiqueta = nil end end end -- Según esté informada la etiqueta o el enlace local resultado if etiqueta and enlace and etiqueta ~= enlace then --Ambos si no son iguales resultado = '' .. etiqueta .. '' elseif enlace then -- Solo el enlace o ambps y son iguales resultado = '' .. enlace .. '' elseif etiqueta then -- Solo la etiqueta resultado = etiqueta elseif idEntidad then -- Solo la entidad -- Obtener la etiqueta y el enlace de Wikidata de la Wikia de Muertes inglesa. local entidad=mw.wikibase.getEntityObject(idEntidad) --if true then return require('Módulo:Tablas').tostring(entidad) end if entidad then if entidad.labels and entidad.labels.en then etiqueta = entidad.labels.en.value end if entidad.sitelinks and entidad.sitelinks.enwiki then enlace = entidad.sitelinks.enwiki.title end if etiqueta or enlace then resultado = p.enlazarEnOtroIdioma(enlace, etiqueta, 'en') end end if not resultado then return 'sin etiquetar' .. 'Categoría:Wikia - Muertes em España:Páginas con propiedades de Wikidata sin etiqueta' end end -- Añadir cursivas if opciones and opciones.cursivas 'sí' then resultado = "" .. resultado .. "''" end return resultado end function p.formatId( value, options ) local wikidata = require('Módulo:Wikidata') local id = 'Q'.. value'numeric-id' local opciones = {separador = ' ',propiedad = options.propiedadValor, uno = 'sí', entityId = id, formatoTexto = 'mayúscula'} return wikidata.getPropiedad(opciones) end function p.formatBandera2( value, options ) local bandera = require('Módulo:Bandera') local id = 'Q'.. value'numeric-id' local label = mw.wikibase.label( 'Q' .. value'numeric-id' ) or '' local tipo = mw.ustring.gsub(label,'(%D+)%sde%s%D+','%1') if options.cortar and options.cortar ~= '' then coincidencia = mw.ustring.find( es:lc(options.cortar), es:lc(tipo), plain ) end if coincidencia then nombre = mw.ustring.gsub(label,'%D+%sde%s(%D+)','%1') elseif label and label ~= '' then nombre = label end return bandera.banderaLua(id, '20px', '', nombre) end function p.formatFicha( value, options ) local ficha = require('Módulo:Ficha') local opciones = {propiedadValor='P31'} local etiqueta = p.formatId( value, opciones) options.cortar = etiqueta local parametros = { child = 'si', estiloetiqueta1 = 'border:0;font-weight:100;padding:0px 7px', estilodatos1 = 'border:0;font-weight:100;padding:0px 7px 0px 2px', etiqueta1='• '.. es:ucfirst(etiqueta), datos1 = p.formatBandera2(value, options)} return ficha.infobox(parametros) end function p.formatoId ( value, options ) return value'numeric-id' and 'Q' .. value'numeric-id' end return p